<template>
	<form-item-wrapper :designer="designer" :field="field" :rules="rules" :design-state="designState"
					   :parent-widget="parentWidget" :parent-list="parentList" :index-of-parent-list="indexOfParentList" :style="field.options.customStyle"
					   :sub-form-row-index="subFormRowIndex" :sub-form-col-index="subFormColIndex" :sub-form-row-id="subFormRowId">
		<el-select ref="fieldEditor" v-model="fieldModel" class="full-width-input"
				   :disabled="field.options.disabled"
				   :size="widgetSize"
				   :clearable="field.options.clearable"
				   :filterable="field.options.filterable"
				   :allow-create="field.options.allowCreate"
				   :default-first-option="allowDefaultFirstOption"
				   :automatic-dropdown="field.options.automaticDropdown"
				   :multiple="field.options.multiple" :multiple-limit="field.options.multipleLimit"
				   :placeholder="field.options.placeholder || $t('render.hint.selectPlaceholder')"
				   :remote="field.options.remote" :remote-method="remoteQuery"
				   @focus="handleFocusCustomEvent" @blur="handleBlurCustomEvent"
				   @change="handleChangeEvent">
			<el-option v-for="item in field.options.optionItems" :key="item.value" :label="item.label"
					   :value="item.value+``" :disabled="item.disabled">
			</el-option>
		</el-select>
	</form-item-wrapper>
</template>

<script>
import FormItemWrapper from './form-item-wrapper'
import emitter from '@/utils/emitter'
import fieldMixin from "./fieldMixin";
import http from "@/utils/request";
import config from "@/config";

export default {
	name: "select-filter-widget",
	componentName: 'FieldWidget',  //必须固定为FieldWidget，用于接收父级组件的broadcast事件
	mixins: [emitter, fieldMixin],
	props: {
		field: Object,
		parentWidget: Object,
		parentList: Array,
		indexOfParentList: Number,
		designer: Object,

		designState: {
			type: Boolean,
			default: false
		},

		subFormRowIndex: { /* 子表单组件行索引，从0开始计数 */
			type: Number,
			default: -1
		},
		subFormColIndex: { /* 子表单组件列索引，从0开始计数 */
			type: Number,
			default: -1
		},
		subFormRowId: { /* 子表单组件行Id，唯一id且不可变 */
			type: String,
			default: ''
		},

	},
	components: {
		FormItemWrapper,
	},
	data() {
		return {
			oldFieldValue: null, //field组件change之前的值
			fieldModel: '',
			rules: [],
		}
	},
	computed: {
		allowDefaultFirstOption() {
			return (!!this.field.options.filterable && !!this.field.options.allowCreate)
		},

	},
	beforeCreate() {
		/* 这里不能访问方法和属性！！ */
	},
	created() {
		/* 注意：子组件mounted在父组件created之后、父组件mounted之前触发，故子组件mounted需要用到的prop
		   需要在父组件created中初始化！！ */
		this.initOptionItems()
		this.initFieldModel()
		this.registerToRefList()
		this.initEventHandler()
		this.buildFieldRules()

		this.handleOnCreated()
	},

	mounted() {
		this.handleOnMounted();
		this.showLabelByVal();
	},

	beforeUnmount() {
		this.unregisterFromRefList()
	},

	methods: {
		async showLabelByVal()
		{
			let valArr=[];
			if(!this.field.options.multiple){
				valArr.push(this.field.options.defaultValue)
			}else{
				valArr = this.field.options.defaultValue;
			}
			if (this.field.options.dbInterFace != '') {
				let url = `${config.API_URL}/get/system/getDataByBdInterFace`
				let res = await http.get(url, {keyId: valArr.join(","), dbInterFace: this.field.options.dbInterFace});
				if (res.code == 200) {
					this.field.options.optionItems = res.data;
				}
			}
		}
	}
}
</script>

<style lang="scss" scoped>
@import "../../../../../assets/formdesigner/styles/global.scss"; /* form-item-wrapper已引入，还需要重复引入吗？ */

.full-width-input {
	width: 100% !important;
}

</style>
